// pages/assetBorrow/assetBorrow.js
import {getBorrowerDept,getLocationTree,borrowAsset} from "@/api/assetsBorrow.js"
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 借用人
    username: "",
    userId: "",
    // 部门
    deptName: "",
    deptId:"",
    // 借用日期
    assignDate: "",
    // 归还日期
    expectedReturn: "",
    // 借出后位置
    borrowLocation: "",
    usagePurpose: "",
    show: false,
    deptActions: [],
    // 借用时间
    showBorrowPicker: false,
    // 归还时间
    showReturnPicker: false,
    // 最小时间
    minDate: new Date().getTime(),
    // 位置
    showLocationPicker: false,
    locationId: '',
    locationOptions: [], // 级联选项数据
    showAssetPopup: false,
    assets:[], // 选择的资产
    assetsIds:[], // 选择的资产id
  },
  //  用户id获取部门名称
  getDeptName(userId) {
    getBorrowerDept(userId).then(res => {
      console.log(res.data.departments,"部门");
      // 重新组合数据结构
      const deptActions = res.data.departments.map(dept => ({
        name: dept.deptName,
        id: dept.id
      }));
      this.setData({
        deptActions: deptActions
      });

    });
  },
  //转换树形结构数据
  transformToCascaderFormat(data) {
    // 校验数据结构并打印日志
    console.log("原始数据:", data);
    return data.map(item => {
      const transformedItem = {
        value: item.id,
        text: item.locationName
      };
      if (item.children && Array.isArray(item.children) && item.children.length > 0) {
        transformedItem.children = this.transformToCascaderFormat(item.children); // 仅在有子节点时递归处理
      }
      return transformedItem;
    });
  },
  // 获取位置树形数据
  getLocationName() {
    getLocationTree().then(res => {
      const options = this.transformToCascaderFormat(res.data);
      console.log("转换后的级联选项数据:", options); // 打印转换后的数据
      if (Array.isArray(options) && options.length > 0) {
        this.setData({
          locationOptions: options
        });
      } else {
        console.error("获取的位置数据为空或格式不正确");
      }
    }).catch(err => {
      console.error("获取位置数据失败:", err);
    });
  },
  // 点击申请人
  applyTap(){
    wx.showToast({
      icon: "none",
      title: '此字段不可修改，您无需填写',
    })
  },
  // 显示部门选择器
  showDeptPicker() {
    this.setData({
      show: true
    });
  },
  // 关闭部门选择器
  onClose() {
    this.setData({ show: false });
  },

  onSelect(event) {
    console.log(event.detail);
    let {name,id} = event.detail;
    this.setData({
      deptName: name,
      deptId: id,
      show: false
    });
  },
  // 显示借用时间选择器
  showBorrowDatePicker() {
    this.setData({
      showBorrowPicker: true
    });
  },
  // 当借用时间改变
  onBorrowChange(event){
    //获取当前改变的日期
    const selectedDate = event.detail;
    //格式化日期
    const formattedDate = this.formatDate(selectedDate);
    //设置页面显示日期 filed 中的 assignDate
    this.setData({
      assignDate: formattedDate
    });
  },
  // 当确认选择借用日期
  onBorrowConfirm() {
    this.setData({
      showBorrowPicker: false,
    });
  },
  // 当取消选择借用日期
  onBorrowCancel() {
    this.setData({
      showBorrowPicker: false,
    });
  },

  // 显示归还时间选择器
  showReturnDatePicker() {
    this.setData({
      showReturnPicker: true
    });
  },
  // 当归还时间改变
  onReturnChange(event){
    //获取当前改变的日期
    const selectedDate = event.detail;
    //格式化日期
    const formattedDate = this.formatDate(selectedDate);
    //设置页面显示日期 filed 中的 expectedReturn
    this.setData({
      expectedReturn: formattedDate
    });
  },
  // 当确认选择归还日期
  onReturnConfirm() {
    this.setData({
      showReturnPicker: false,
    });
  },
  // 当取消选择归还日期
  onReturnCancel() {
    this.setData({
      showReturnPicker: false,
    });
  },
  // 显示级联选择器
  showLocationCascader() {
    this.setData({ showLocationPicker: true });
  },

  // 点击某个选项时触发
  onLocationChange(event) {
      const options = event.detail.selectedOptions;
      const lastLocation = options[options.length - 1]; // 获取数组最后一项
      
      console.log('选中项:', lastLocation);
  
      this.setData({
        borrowLocation: lastLocation.text,
        locationId: Number(lastLocation.value)
      });
  },

  // 自定义确认按钮点击事件
  onCustomConfirm() {
    this.setData({ showLocationPicker: false }); 
    // 关闭弹框
    // console.log('用户确认了选中的位置:', this.data.borrowLocation);
  },
  // 点击选择资产
  showAssetPopupList(){
    this.setData({ 
      showAssetPopup: true
    });
  },
  // 当资产选择改变时
  getCheckAsset(event){
    console.log('资产选择改变:', event);
    const assetsIds = event.detail.map(item => item.id);
    this.setData({
      assets:event.detail,
      assetsIds
    })
    console.log(this.data.assetsIds,777)
  },

  // 点击提交按钮
  submintBorrow(){
    console.log(this.data)
    let {deptId,assignDate,expectedReturn,locationId,usagePurpose,assets,userId} = this.data;
    if(!deptId){
      wx.showToast({
        title: '请选择部门',
        icon: 'error'
      });
      return;
    }
    if(!locationId){
      wx.showToast({
        title: '请选择位置',
        icon: 'error'
      });
      return;
    }
    if(!assignDate){
      wx.showToast({
        title: '请选择预计借出时间',
        icon: 'error'
      });
      return;
    }
    if(!expectedReturn){
      wx.showToast({
        title: '请选择预计归还时间',
        icon: 'error'
      });
      return;
    }
    if(!usagePurpose){
      wx.showToast({
        title: '请输入使用目的',
        icon: 'error'
      });
      return;
    }
    if(!assets.length){
      wx.showToast({
        title: '请选择资产',
        icon: 'error'
      });
    }

    console.log('提交信息:', this.data)
    wx.showLoading({
      title: '提交中...',
    });
    borrowAsset({
      userId,
      deptId,
      assignDate,
      expectedReturn,
      locationId,
      usagePurpose,
      assets
    }).then(res=>{
      console.log(res);
      wx.hideLoading();
      this.clearForm()
      //获取chooseAsset组件实例
      const chooseAsset = this.selectComponent('#chooseAsset');
      //调用组件的getAssetList方法
      chooseAsset.getAssetList();
      setTimeout(()=>{
        wx.switchTab({
          url: '/pages/index/index',
        })
      }, 500)
      wx.showToast({
        title: '提交成功',
        icon: 'success'
      })
    })
    
  },
  // 清空表单
  clearForm() {
    this.setData({
      deptId: '',
      assignDate: '',
      expectedReturn: '',
      locationId: '',
      usagePurpose: '',
      assets: [],
      assetsIds:[]
    })
  },
  // 移除已选资产
  removeAsset(event){
    console.log('移除资产:', event);
    const { removeId } = event.currentTarget.dataset;
    const {assets, assetsIds} = this.data;
    const newAssets = assets.filter(item => item.id !== removeId);
    const newAssetsIds = assetsIds.filter(item => item !== removeId);
    this.setData({
      assets: newAssets,
      assetsIds: newAssetsIds
    })

    console.log(this.data.assetsIds)

  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.setData({
      userId: wx.getStorageSync('id'),
      username: wx.getStorageSync('username'),
    });
    this.getDeptName(this.data.userId)
    this.getLocationName()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 格式化时间戳为年月日
  formatDate(timestamp) {
    const date = new Date(timestamp);
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    return `${year}-${month}-${day}`;
  },

})